# -*- coding: utf-8 -*-

from django.db import models

class Usuario(models.Model):
    nome = models.CharField(max_length=255)

    usuario = models.CharField(max_length=255, unique=True)
    senha = models.CharField(max_length=255)

    ativo = models.BooleanField(default=True)
    superusuario = models.BooleanField(default=False)

    grupo = models.ForeignKey('Grupo', null=True, blank=True)
    permissoes = models.ManyToManyField('Permissao', editable=False)

    data_criacao = models.DateTimeField(auto_now_add=True, editable=False)
    ultimo_acesso = models.DateTimeField(null=True, editable=False)

    # Usuário que criou este usuário
    user_responsavel = models.ForeignKey('Usuario', null=True, related_name='+', editable=False)

    class Meta:
        app_label = 'usuarios'

    def tem_permissao(self, acao):
        # O superusuario pode tudo.
        if self.superusuario:
            return True

        # Verifica as permissões do usuários.
        for p in self.permissoes.all():
            if p.tem_permissao(acao):
                return True

        # Verifica a permissão do grupo.
        if self.grupo and self.grupo.tem_permissao(acao):
            return True

        # Não está autorizado.
        return False
    
    def __unicode__(self):
        return u"{0}".format(self.nome)

